<html>
<head>
  <title>Evernote Export</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="YXBJ Windows/601748 (zh-CN, DDL); Windows/10.0.0 (Win64); EDAMVersion=V2;"/>
  <meta name="content-class" content="yinxiang.markdown"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="931"/>

<div><span><div style="font-size: 14px; margin: 0; padding: 0; width: 100%;"><h3 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 27px; color: #333;">dict和set背后</h3>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">dict和set的速度非常快</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">列表速度不行，因为不支持散列</li>
</ul>
<h4 style="line-height: 160%; box-sizing: content-box; font-size: 20px; color: #333;">什么是散列</h4>
<blockquote style="line-height: 160%; box-sizing: content-box; margin: 15px 0; border-left: 4px solid #ddd; padding: 0 15px; color: #777;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333; margin-top: 0; margin-bottom: 0;">散列表示一个稀疏数组，散列表里的单元通常叫表元（burket），在dict的散列表中，每个键值对都占用一个表元，每个表元都有两个部分，一个是对键的引用，另一个是对值的引用。</p>
</blockquote>
<blockquote style="line-height: 160%; box-sizing: content-box; margin: 15px 0; border-left: 4px solid #ddd; padding: 0 15px; color: #777;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333; margin-top: 0; margin-bottom: 0;">python会保证大概有三分之一的表元是空的， 所以在快达到这个阈值的时候，原有的散列表会被复制到一个更大的空间里，</p>
</blockquote>
<h5 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 16px; color: #333;">- 散列值和相等性</h5>
<blockquote style="line-height: 160%; box-sizing: content-box; margin: 15px 0; border-left: 4px solid #ddd; padding: 0 15px; color: #777;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333; margin-top: 0; margin-bottom: 0;">如果两个对象在比较的时候是相等的，那它们的散列值必须相等，否则散列表就不能正常工作了，为了让散列值能够胜任散列表索引的角色，它们在索引空间里应尽量分散开，这意味着越相近的但不相等的对象，其散列值应该差别很大，比如1,1.00001,1.00002的散列值应该相差很远</p>
</blockquote>
<h5 style="line-height: 160%; box-sizing: content-box; font-weight: 700; font-size: 16px; color: #333;">- 散列表算法</h5>
<pre style="line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; margin: 2px 0 8px; background-color: #f5f7f8;"><code style="display: block; overflow-x: auto; line-height: 160%; box-sizing: content-box; border: 0; border-radius: 0; letter-spacing: -.3px; padding: 18px; color: #f4f4f4; white-space: pre-wrap; background: #fff; text-align: center;"><div style="line-height: 160%; box-sizing: content-box;"><var style="line-height: 160%; box-sizing: content-box; font-style: italic; display: none;">PHN2ZyBpZD0iZHBrbW4wM2hrdXciIHdpZHRoPSIxMDAlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXgtd2lkdGg6IDU0NS44MjgxMjVweDsiIHZpZXdCb3g9IjAgMCA1NDUuODI4MTI1IDU3OC40NTkzNzM0NzQxMjExIj48c3R5bGU+CgoKI2Rwa21uMDNoa3V3IC5sYWJlbCB7CiAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbDsKICBjb2xvcjogIzMzMzsgfQoKI2Rwa21uMDNoa3V3IC5ub2RlIHJlY3QsCiNkcGttbjAzaGt1dyAubm9kZSBjaXJjbGUsCiNkcGttbjAzaGt1dyAubm9kZSBlbGxpcHNlLAojZHBrbW4wM2hrdXcgLm5vZGUgcG9seWdvbiB7CiAgZmlsbDogI0VDRUNGRjsKICBzdHJva2U6ICM5MzcwREI7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7IH0KCiNkcGttbjAzaGt1dyAubm9kZS5jbGlja2FibGUgewogIGN1cnNvcjogcG9pbnRlcjsgfQoKI2Rwa21uMDNoa3V3IC5hcnJvd2hlYWRQYXRoIHsKICBmaWxsOiAjMzMzMzMzOyB9CgojZHBrbW4wM2hrdXcgLmVkZ2VQYXRoIC5wYXRoIHsKICBzdHJva2U6ICMzMzMzMzM7CiAgc3Ryb2tlLXdpZHRoOiAxLjVweDsgfQoKI2Rwa21uMDNoa3V3IC5lZGdlTGFiZWwgewogIGJhY2tncm91bmQtY29sb3I6ICNlOGU4ZTg7IH0KCiNkcGttbjAzaGt1dyAuY2x1c3RlciByZWN0IHsKICBmaWxsOiAjZmZmZmRlICFpbXBvcnRhbnQ7CiAgc3Ryb2tlOiAjYWFhYTMzICFpbXBvcnRhbnQ7CiAgc3Ryb2tlLXdpZHRoOiAxcHggIWltcG9ydGFudDsgfQoKI2Rwa21uMDNoa3V3IC5jbHVzdGVyIHRleHQgewogIGZpbGw6ICMzMzM7IH0KCiNkcGttbjAzaGt1dyBkaXYubWVybWFpZFRvb2x0aXAgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgbWF4LXdpZHRoOiAyMDBweDsKICBwYWRkaW5nOiAycHg7CiAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbDsKICBmb250LXNpemU6IDEycHg7CiAgYmFja2dyb3VuZDogI2ZmZmZkZTsKICBib3JkZXI6IDFweCBzb2xpZCAjYWFhYTMzOwogIGJvcmRlci1yYWRpdXM6IDJweDsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKICB6LWluZGV4OiAxMDA7IH0KCiNkcGttbjAzaGt1dyAuYWN0b3IgewogIHN0cm9rZTogI0NDQ0NGRjsKICBmaWxsOiAjRUNFQ0ZGOyB9CgojZHBrbW4wM2hrdXcgdGV4dC5hY3RvciB7CiAgZmlsbDogYmxhY2s7CiAgc3Ryb2tlOiBub25lOyB9CgojZHBrbW4wM2hrdXcgLmFjdG9yLWxpbmUgewogIHN0cm9rZTogZ3JleTsgfQoKI2Rwa21uMDNoa3V3IC5tZXNzYWdlTGluZTAgewogIHN0cm9rZS13aWR0aDogMS41OwogIHN0cm9rZS1kYXNoYXJyYXk6ICcyIDInOwogIHN0cm9rZTogIzMzMzsgfQoKI2Rwa21uMDNoa3V3IC5tZXNzYWdlTGluZTEgewogIHN0cm9rZS13aWR0aDogMS41OwogIHN0cm9rZS1kYXNoYXJyYXk6ICcyIDInOwogIHN0cm9rZTogIzMzMzsgfQoKI2Rwa21uMDNoa3V3ICNhcnJvd2hlYWQgewogIGZpbGw6ICMzMzM7IH0KCiNkcGttbjAzaGt1dyAjY3Jvc3NoZWFkIHBhdGggewogIGZpbGw6ICMzMzMgIWltcG9ydGFudDsKICBzdHJva2U6ICMzMzMgIWltcG9ydGFudDsgfQoKI2Rwa21uMDNoa3V3IC5tZXNzYWdlVGV4dCB7CiAgZmlsbDogIzMzMzsKICBzdHJva2U6IG5vbmU7IH0KCiNkcGttbjAzaGt1dyAubGFiZWxCb3ggewogIHN0cm9rZTogI0NDQ0NGRjsKICBmaWxsOiAjRUNFQ0ZGOyB9CgojZHBrbW4wM2hrdXcgLmxhYmVsVGV4dCB7CiAgZmlsbDogYmxhY2s7CiAgc3Ryb2tlOiBub25lOyB9CgojZHBrbW4wM2hrdXcgLmxvb3BUZXh0IHsKICBmaWxsOiBibGFjazsKICBzdHJva2U6IG5vbmU7IH0KCiNkcGttbjAzaGt1dyAubG9vcExpbmUgewogIHN0cm9rZS13aWR0aDogMjsKICBzdHJva2UtZGFzaGFycmF5OiAnMiAyJzsKICBzdHJva2U6ICNDQ0NDRkY7IH0KCiNkcGttbjAzaGt1dyAubm90ZSB7CiAgc3Ryb2tlOiAjYWFhYTMzOwogIGZpbGw6ICNmZmY1YWQ7IH0KCiNkcGttbjAzaGt1dyAubm90ZVRleHQgewogIGZpbGw6IGJsYWNrOwogIHN0cm9rZTogbm9uZTsKICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsOwogIGZvbnQtc2l6ZTogMTRweDsgfQoKI2Rwa21uMDNoa3V3IC5hY3RpdmF0aW9uMCB7CiAgZmlsbDogI2Y0ZjRmNDsKICBzdHJva2U6ICM2NjY7IH0KCiNkcGttbjAzaGt1dyAuYWN0aXZhdGlvbjEgewogIGZpbGw6ICNmNGY0ZjQ7CiAgc3Ryb2tlOiAjNjY2OyB9CgojZHBrbW4wM2hrdXcgLmFjdGl2YXRpb24yIHsKICBmaWxsOiAjZjRmNGY0OwogIHN0cm9rZTogIzY2NjsgfQoKCiNkcGttbjAzaGt1dyAuc2VjdGlvbiB7CiAgc3Ryb2tlOiBub25lOwogIG9wYWNpdHk6IDAuMjsgfQoKI2Rwa21uMDNoa3V3IC5zZWN0aW9uMCB7CiAgZmlsbDogcmdiYSgxMDIsIDEwMiwgMjU1LCAwLjQ5KTsgfQoKI2Rwa21uMDNoa3V3IC5zZWN0aW9uMiB7CiAgZmlsbDogI2ZmZjQwMDsgfQoKI2Rwa21uMDNoa3V3IC5zZWN0aW9uMSwKI2Rwa21uMDNoa3V3IC5zZWN0aW9uMyB7CiAgZmlsbDogd2hpdGU7CiAgb3BhY2l0eTogMC4yOyB9CgojZHBrbW4wM2hrdXcgLnNlY3Rpb25UaXRsZTAgewogIGZpbGw6ICMzMzM7IH0KCiNkcGttbjAzaGt1dyAuc2VjdGlvblRpdGxlMSB7CiAgZmlsbDogIzMzMzsgfQoKI2Rwa21uMDNoa3V3IC5zZWN0aW9uVGl0bGUyIHsKICBmaWxsOiAjMzMzOyB9CgojZHBrbW4wM2hrdXcgLnNlY3Rpb25UaXRsZTMgewogIGZpbGw6ICMzMzM7IH0KCiNkcGttbjAzaGt1dyAuc2VjdGlvblRpdGxlIHsKICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgZm9udC1zaXplOiAxMXB4OwogIHRleHQtaGVpZ2h0OiAxNHB4OyB9CgoKI2Rwa21uMDNoa3V3IC5ncmlkIC50aWNrIHsKICBzdHJva2U6IGxpZ2h0Z3JleTsKICBvcGFjaXR5OiAwLjM7CiAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzOyB9CgojZHBrbW4wM2hrdXcgLmdyaWQgcGF0aCB7CiAgc3Ryb2tlLXdpZHRoOiAwOyB9CgoKI2Rwa21uMDNoa3V3IC50b2RheSB7CiAgZmlsbDogbm9uZTsKICBzdHJva2U6IHJlZDsKICBzdHJva2Utd2lkdGg6IDJweDsgfQoKCgojZHBrbW4wM2hrdXcgLnRhc2sgewogIHN0cm9rZS13aWR0aDogMjsgfQoKI2Rwa21uMDNoa3V3IC50YXNrVGV4dCB7CiAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICBmb250LXNpemU6IDExcHg7IH0KCiNkcGttbjAzaGt1dyAudGFza1RleHRPdXRzaWRlUmlnaHQgewogIGZpbGw6IGJsYWNrOwogIHRleHQtYW5jaG9yOiBzdGFydDsKICBmb250LXNpemU6IDExcHg7IH0KCiNkcGttbjAzaGt1dyAudGFza1RleHRPdXRzaWRlTGVmdCB7CiAgZmlsbDogYmxhY2s7CiAgdGV4dC1hbmNob3I6IGVuZDsKICBmb250LXNpemU6IDExcHg7IH0KCgojZHBrbW4wM2hrdXcgLnRhc2tUZXh0MCwKI2Rwa21uMDNoa3V3IC50YXNrVGV4dDEsCiNkcGttbjAzaGt1dyAudGFza1RleHQyLAojZHBrbW4wM2hrdXcgLnRhc2tUZXh0MyB7CiAgZmlsbDogd2hpdGU7IH0KCiNkcGttbjAzaGt1dyAudGFzazAsCiNkcGttbjAzaGt1dyAudGFzazEsCiNkcGttbjAzaGt1dyAudGFzazIsCiNkcGttbjAzaGt1dyAudGFzazMgewogIGZpbGw6ICM4YTkwZGQ7CiAgc3Ryb2tlOiAjNTM0ZmJjOyB9CgojZHBrbW4wM2hrdXcgLnRhc2tUZXh0T3V0c2lkZTAsCiNkcGttbjAzaGt1dyAudGFza1RleHRPdXRzaWRlMiB7CiAgZmlsbDogYmxhY2s7IH0KCiNkcGttbjAzaGt1dyAudGFza1RleHRPdXRzaWRlMSwKI2Rwa21uMDNoa3V3IC50YXNrVGV4dE91dHNpZGUzIHsKICBmaWxsOiBibGFjazsgfQoKCiNkcGttbjAzaGt1dyAuYWN0aXZlMCwKI2Rwa21uMDNoa3V3IC5hY3RpdmUxLAojZHBrbW4wM2hrdXcgLmFjdGl2ZTIsCiNkcGttbjAzaGt1dyAuYWN0aXZlMyB7CiAgZmlsbDogI2JmYzdmZjsKICBzdHJva2U6ICM1MzRmYmM7IH0KCiNkcGttbjAzaGt1dyAuYWN0aXZlVGV4dDAsCiNkcGttbjAzaGt1dyAuYWN0aXZlVGV4dDEsCiNkcGttbjAzaGt1dyAuYWN0aXZlVGV4dDIsCiNkcGttbjAzaGt1dyAuYWN0aXZlVGV4dDMgewogIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7IH0KCgojZHBrbW4wM2hrdXcgLmRvbmUwLAojZHBrbW4wM2hrdXcgLmRvbmUxLAojZHBrbW4wM2hrdXcgLmRvbmUyLAojZHBrbW4wM2hrdXcgLmRvbmUzIHsKICBzdHJva2U6IGdyZXk7CiAgZmlsbDogbGlnaHRncmV5OwogIHN0cm9rZS13aWR0aDogMjsgfQoKI2Rwa21uMDNoa3V3IC5kb25lVGV4dDAsCiNkcGttbjAzaGt1dyAuZG9uZVRleHQxLAojZHBrbW4wM2hrdXcgLmRvbmVUZXh0MiwKI2Rwa21uMDNoa3V3IC5kb25lVGV4dDMgewogIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7IH0KCgojZHBrbW4wM2hrdXcgLmNyaXQwLAojZHBrbW4wM2hrdXcgLmNyaXQxLAojZHBrbW4wM2hrdXcgLmNyaXQyLAojZHBrbW4wM2hrdXcgLmNyaXQzIHsKICBzdHJva2U6ICNmZjg4ODg7CiAgZmlsbDogcmVkOwogIHN0cm9rZS13aWR0aDogMjsgfQoKI2Rwa21uMDNoa3V3IC5hY3RpdmVDcml0MCwKI2Rwa21uMDNoa3V3IC5hY3RpdmVDcml0MSwKI2Rwa21uMDNoa3V3IC5hY3RpdmVDcml0MiwKI2Rwa21uMDNoa3V3IC5hY3RpdmVDcml0MyB7CiAgc3Ryb2tlOiAjZmY4ODg4OwogIGZpbGw6ICNiZmM3ZmY7CiAgc3Ryb2tlLXdpZHRoOiAyOyB9CgojZHBrbW4wM2hrdXcgLmRvbmVDcml0MCwKI2Rwa21uMDNoa3V3IC5kb25lQ3JpdDEsCiNkcGttbjAzaGt1dyAuZG9uZUNyaXQyLAojZHBrbW4wM2hrdXcgLmRvbmVDcml0MyB7CiAgc3Ryb2tlOiAjZmY4ODg4OwogIGZpbGw6IGxpZ2h0Z3JleTsKICBzdHJva2Utd2lkdGg6IDI7CiAgY3Vyc29yOiBwb2ludGVyOwogIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsgfQoKI2Rwa21uMDNoa3V3IC5kb25lQ3JpdFRleHQwLAojZHBrbW4wM2hrdXcgLmRvbmVDcml0VGV4dDEsCiNkcGttbjAzaGt1dyAuZG9uZUNyaXRUZXh0MiwKI2Rwa21uMDNoa3V3IC5kb25lQ3JpdFRleHQzIHsKICBmaWxsOiBibGFjayAhaW1wb3J0YW50OyB9CgojZHBrbW4wM2hrdXcgLmFjdGl2ZUNyaXRUZXh0MCwKI2Rwa21uMDNoa3V3IC5hY3RpdmVDcml0VGV4dDEsCiNkcGttbjAzaGt1dyAuYWN0aXZlQ3JpdFRleHQyLAojZHBrbW4wM2hrdXcgLmFjdGl2ZUNyaXRUZXh0MyB7CiAgZmlsbDogYmxhY2sgIWltcG9ydGFudDsgfQoKI2Rwa21uMDNoa3V3IC50aXRsZVRleHQgewogIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgZm9udC1zaXplOiAxOHB4OwogIGZpbGw6IGJsYWNrOyB9CgojZHBrbW4wM2hrdXcgZy5jbGFzc0dyb3VwIHRleHQgewogIGZpbGw6ICM5MzcwREI7CiAgc3Ryb2tlOiBub25lOwogIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWw7CiAgZm9udC1zaXplOiAxMHB4OyB9CgojZHBrbW4wM2hrdXcgZy5jbGFzc0dyb3VwIHJlY3QgewogIGZpbGw6ICNFQ0VDRkY7CiAgc3Ryb2tlOiAjOTM3MERCOyB9CgojZHBrbW4wM2hrdXcgZy5jbGFzc0dyb3VwIGxpbmUgewogIHN0cm9rZTogIzkzNzBEQjsKICBzdHJva2Utd2lkdGg6IDE7IH0KCiNkcGttbjAzaGt1dyAuY2xhc3NMYWJlbCAuYm94IHsKICBzdHJva2U6IG5vbmU7CiAgc3Ryb2tlLXdpZHRoOiAwOwogIGZpbGw6ICNFQ0VDRkY7CiAgb3BhY2l0eTogMC41OyB9CgojZHBrbW4wM2hrdXcgLmNsYXNzTGFiZWwgLmxhYmVsIHsKICBmaWxsOiAjOTM3MERCOwogIGZvbnQtc2l6ZTogMTBweDsgfQoKI2Rwa21uMDNoa3V3IC5yZWxhdGlvbiB7CiAgc3Ryb2tlOiAjOTM3MERCOwogIHN0cm9rZS13aWR0aDogMTsKICBmaWxsOiBub25lOyB9CgojZHBrbW4wM2hrdXcgI2NvbXBvc2l0aW9uU3RhcnQgewogIGZpbGw6ICM5MzcwREI7CiAgc3Ryb2tlOiAjOTM3MERCOwogIHN0cm9rZS13aWR0aDogMTsgfQoKI2Rwa21uMDNoa3V3ICNjb21wb3NpdGlvbkVuZCB7CiAgZmlsbDogIzkzNzBEQjsKICBzdHJva2U6ICM5MzcwREI7CiAgc3Ryb2tlLXdpZHRoOiAxOyB9CgojZHBrbW4wM2hrdXcgI2FnZ3JlZ2F0aW9uU3RhcnQgewogIGZpbGw6ICNFQ0VDRkY7CiAgc3Ryb2tlOiAjOTM3MERCOwogIHN0cm9rZS13aWR0aDogMTsgfQoKI2Rwa21uMDNoa3V3ICNhZ2dyZWdhdGlvbkVuZCB7CiAgZmlsbDogI0VDRUNGRjsKICBzdHJva2U6ICM5MzcwREI7CiAgc3Ryb2tlLXdpZHRoOiAxOyB9CgojZHBrbW4wM2hrdXcgI2RlcGVuZGVuY3lTdGFydCB7CiAgZmlsbDogIzkzNzBEQjsKICBzdHJva2U6ICM5MzcwREI7CiAgc3Ryb2tlLXdpZHRoOiAxOyB9CgojZHBrbW4wM2hrdXcgI2RlcGVuZGVuY3lFbmQgewogIGZpbGw6ICM5MzcwREI7CiAgc3Ryb2tlOiAjOTM3MERCOwogIHN0cm9rZS13aWR0aDogMTsgfQoKI2Rwa21uMDNoa3V3ICNleHRlbnNpb25TdGFydCB7CiAgZmlsbDogIzkzNzBEQjsKICBzdHJva2U6ICM5MzcwREI7CiAgc3Ryb2tlLXdpZHRoOiAxOyB9CgojZHBrbW4wM2hrdXcgI2V4dGVuc2lvbkVuZCB7CiAgZmlsbDogIzkzNzBEQjsKICBzdHJva2U6ICM5MzcwREI7CiAgc3Ryb2tlLXdpZHRoOiAxOyB9CgojZHBrbW4wM2hrdXcgLmNvbW1pdC1pZCwKI2Rwa21uMDNoa3V3IC5jb21taXQtbXNnLAojZHBrbW4wM2hrdXcgLmJyYW5jaC1sYWJlbCB7CiAgZmlsbDogbGlnaHRncmV5OwogIGNvbG9yOiBsaWdodGdyZXk7IH0KCgoKI2Rwa21uMDNoa3V3IC5sYWJlbHsKICBjb2xvcjojMThCMTRFOwp9CiNkcGttbjAzaGt1dyAubm9kZSByZWN0LAojZHBrbW4wM2hrdXcgLm5vZGUgY2lyY2xlLAojZHBrbW4wM2hrdXcgLm5vZGUgZWxsaXBzZSwKI2Rwa21uMDNoa3V3IC5ub2RlIHBvbHlnb24gewogIGZpbGw6ICNGOUZGRkI7OwogIHN0cm9rZTogIzJEQkQ2MDsKICBzdHJva2Utd2lkdGg6IDEuNXB4Owp9CiNkcGttbjAzaGt1dyAuYXJyb3doZWFkUGF0aHsKICBmaWxsOiAjMkRCRDYwOwp9CiNkcGttbjAzaGt1dyAuZWRnZVBhdGggLnBhdGggewogIHN0cm9rZTogIzJEQkQ2MDsKICBzdHJva2Utd2lkdGg6IDFweDsKfQojZHBrbW4wM2hrdXcgLmVkZ2VMYWJlbCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQojZHBrbW4wM2hrdXcgLmNsdXN0ZXIgcmVjdCB7CiAgZmlsbDogI0Y5RkZGQiAhaW1wb3J0YW50OwogIHN0cm9rZTogIzJEQkQ2MCAhaW1wb3J0YW50OwogIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7Cn0KCiNkcGttbjAzaGt1dyAuY2x1c3RlciB0ZXh0IHsKICBmaWxsOiAjRjlGRkZCOwp9CgojZHBrbW4wM2hrdXcgZGl2Lm1lcm1haWRUb29sdGlwIHsKICBiYWNrZ3JvdW5kOiAjRjlGRkZCOwogIGJvcmRlcjogMXB4IHNvbGlkICMyREJENjA7Cn0KCgojZHBrbW4wM2hrdXcgLmFjdG9yIHsKICBzdHJva2U6ICMyREJENjA7CiAgZmlsbDogI0Y5RkZGQjsKfQoKI2Rwa21uMDNoa3V3IHRleHQuYWN0b3IgewogIGZpbGw6ICMyREJENjA7CiAgc3Ryb2tlOiBub25lOwp9CgojZHBrbW4wM2hrdXcgLmFjdG9yLWxpbmUgewogIHN0cm9rZTogIzJEQkQ2MDsKfQoKI2Rwa21uMDNoa3V3IC5tZXNzYWdlTGluZTAgewogIHN0cm9rZS13aWR0aDogMS41OwogIHN0cm9rZS1kYXNoYXJyYXk6ICcyIDInOwogIG1hcmtlci1lbmQ6ICd1cmwoI2Fycm93aGVhZCknOwogIHN0cm9rZTogIzJEQkQ2MDsKfQoKI2Rwa21uMDNoa3V3IC5tZXNzYWdlTGluZTEgewogIHN0cm9rZS13aWR0aDogMS41OwogIHN0cm9rZS1kYXNoYXJyYXk6ICcyIDInOwogIHN0cm9rZTogIzJEQkQ2MDsKfQoKI2Rwa21uMDNoa3V3ICNhcnJvd2hlYWQgewogIGZpbGw6ICMyREJENjA7Cn0KCiNkcGttbjAzaGt1dyAjY3Jvc3NoZWFkIHBhdGggewogIGZpbGw6ICMyREJENjAgIWltcG9ydGFudDsKICBzdHJva2U6ICMyREJENjAgIWltcG9ydGFudDsKfQoKI2Rwa21uMDNoa3V3IC5tZXNzYWdlVGV4dCB7CiAgZmlsbDogIzJEQkQ2MDsKICBzdHJva2U6IG5vbmU7Cn0KCiNkcGttbjAzaGt1dyAubGFiZWxCb3ggewogIHN0cm9rZTogIzJEQkQ2MDsKICBmaWxsOiAjRjlGRkZCOwp9CgojZHBrbW4wM2hrdXcgLmxhYmVsVGV4dCB7CiAgZmlsbDogIzJEQkQ2MDsKICBzdHJva2U6ICMyREJENjA7Cn0KCiNkcGttbjAzaGt1dyAubG9vcFRleHQgewogIGZpbGw6ICMyREJENjA7CiAgc3Ryb2tlOiAjMkRCRDYwOwp9CgojZHBrbW4wM2hrdXcgLmxvb3BMaW5lIHsKICBzdHJva2Utd2lkdGg6IDI7CiAgc3Ryb2tlLWRhc2hhcnJheTogJzIgMic7CiAgbWFya2VyLWVuZDogJ3VybCgjYXJyb3doZWFkKSc7CiAgc3Ryb2tlOiAjMkRCRDYwOwp9CgojZHBrbW4wM2hrdXcgLm5vdGUgewogIHN0cm9rZTogIzJEQkQ2MDsKICBmaWxsOiAjRjlGRkZCOwp9CgojZHBrbW4wM2hrdXcgLm5vdGVUZXh0IHsKICBmaWxsOiAjMkRCRDYwOwogIHN0cm9rZTogIzJEQkQ2MDsKfQoKCiNkcGttbjAzaGt1dyAuc2VjdGlvbnsKICBvcGFjaXR5OjE7Cn0KI2Rwa21uMDNoa3V3IC5zZWN0aW9uMCwjZHBrbW4wM2hrdXcgIC5zZWN0aW9uMiB7CiAgZmlsbDogI0VDRjdGMDsKfQoKI2Rwa21uMDNoa3V3IC5zZWN0aW9uMSwKI2Rwa21uMDNoa3V3IC5zZWN0aW9uMyB7CiAgZmlsbDogI0ZGRjsKfQojZHBrbW4wM2hrdXcgLnRhc2tUZXh0MCwKI2Rwa21uMDNoa3V3IC50YXNrVGV4dDEsCiNkcGttbjAzaGt1dyAudGFza1RleHQyLAojZHBrbW4wM2hrdXcgLnRhc2tUZXh0MyB7CiAgZmlsbDogI2ZmZjsKfQoKI2Rwa21uMDNoa3V3IC50YXNrMCwKI2Rwa21uMDNoa3V3IC50YXNrMSwKI2Rwa21uMDNoa3V3IC50YXNrMiwKI2Rwa21uMDNoa3V3IC50YXNrMyB7CiAgZmlsbDogIzJEQkQ2MDsKICBzdHJva2U6ICMzNTlGNUE7Cn0KPC9zdHlsZT48c3R5bGU+I2Rwa21uMDNoa3V3IHsKICAgIGNvbG9yOiByZ2IoMjQ0LCAyNDQsIDI0NCk7CiAgICBmb250OiBub3JtYWwgbm9ybWFsIDQwMCBub3JtYWwgMTRweCAvIDIyLjRweCAiTWljcm9zb2Z0IFlhaGVpIiwgc2Fucy1zZXJpZjsKICB9PC9zdHlsZT48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTIsIC0xMikiPjxnIGNsYXNzPSJvdXRwdXQiPjxnIGNsYXNzPSJjbHVzdGVycyI+PC9nPjxnIGNsYXNzPSJlZGdlUGF0aHMiPjxnIGNsYXNzPSJlZGdlUGF0aCIgc3R5bGU9Im9wYWNpdHk6IDE7Ij48cGF0aCBjbGFzcz0icGF0aCIgZD0iTTIyMC45Mjk2ODc1LDU5LjE4NzVMMjIwLjkyOTY4NzUsODQuMTg3NUwyMjAuOTI5Njg3NSwxMDkuMTg3NSIgbWFya2VyLWVuZD0idXJsKCNhcnJvd2hlYWQ0NjgxKSIgc3R5bGU9InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmUiPjwvcGF0aD48ZGVmcz48bWFya2VyIGlkPSJhcnJvd2hlYWQ0NjgxIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlclVuaXRzPSJzdHJva2VXaWR0aCIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiIGNsYXNzPSJhcnJvd2hlYWRQYXRoIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiAxLCAwOyI+PC9wYXRoPjwvbWFya2VyPjwvZGVmcz48L2c+PGcgY2xhc3M9ImVkZ2VQYXRoIiBzdHlsZT0ib3BhY2l0eTogMTsiPjxwYXRoIGNsYXNzPSJwYXRoIiBkPSJNMjIwLjkyOTY4NzUsMTQ4LjM3NUwyMjAuOTI5Njg3NSwxNzMuMzc1TDIyMS40Mjk2ODc1LDE5OC44NzUwMDA3NjI5Mzk1IiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93aGVhZDQ2ODIpIiBzdHlsZT0ic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSI+PC9wYXRoPjxkZWZzPjxtYXJrZXIgaWQ9ImFycm93aGVhZDQ2ODIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyVW5pdHM9InN0cm9rZVdpZHRoIiBtYXJrZXJXaWR0aD0iOCIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0gMCAwIEwgMTAgNSBMIDAgMTAgeiIgY2xhc3M9ImFycm93aGVhZFBhdGgiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IDEsIDA7Ij48L3BhdGg+PC9tYXJrZXI+PC9kZWZzPjwvZz48ZyBjbGFzcz0iZWRnZVBhdGgiIHN0eWxlPSJvcGFjaXR5OiAxOyI+PHBhdGggY2xhc3M9InBhdGgiIGQ9Ik0xODcuMjM2MDUwODgwODA5MDUsMjczLjc1MDExMjYxNzg2OTZMNzEuMTAxNTYyNSwzNDIuMDM3NDk4NDc0MTIxMUw3MS4xMDE1NjI1LDQwNS43NjQwNjA5NzQxMjExIiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93aGVhZDQ2ODMpIiBzdHlsZT0ic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSI+PC9wYXRoPjxkZWZzPjxtYXJrZXIgaWQ9ImFycm93aGVhZDQ2ODMiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyVW5pdHM9InN0cm9rZVdpZHRoIiBtYXJrZXJXaWR0aD0iOCIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0gMCAwIEwgMTAgNSBMIDAgMTAgeiIgY2xhc3M9ImFycm93aGVhZFBhdGgiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDE7IHN0cm9rZS1kYXNoYXJyYXk6IDEsIDA7Ij48L3BhdGg+PC9tYXJrZXI+PC9kZWZzPjwvZz48ZyBjbGFzcz0iZWRnZVBhdGgiIHN0eWxlPSJvcGFjaXR5OiAxOyI+PHBhdGggY2xhc3M9InBhdGgiIGQ9Ik0yMjEuNDI5Njg3NSwzMDcuOTQzNzQ5MjM3MDYwNkwyMjAuOTI5Njg3NSwzNDIuMDM3NDk4NDc0MTIxMUwyMjEuNDI5Njg3NSwzNzcuMTMxMjQ4NDc0MTIxMSIgbWFya2VyLWVuZD0idXJsKCNhcnJvd2hlYWQ0Njg0KSIgc3R5bGU9InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmUiPjwvcGF0aD48ZGVmcz48bWFya2VyIGlkPSJhcnJvd2hlYWQ0Njg0IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlclVuaXRzPSJzdHJva2VXaWR0aCIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiIGNsYXNzPSJhcnJvd2hlYWRQYXRoIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiAxLCAwOyI+PC9wYXRoPjwvbWFya2VyPjwvZGVmcz48L2c+PGcgY2xhc3M9ImVkZ2VQYXRoIiBzdHlsZT0ib3BhY2l0eTogMTsiPjxwYXRoIGNsYXNzPSJwYXRoIiBkPSJNMTk2LjEwMzE5NjU1MzYwNjgsNDQ5LjI1Nzg4MjUyNzcyNzkzTDEzMC43NSw1MDguNjc4MTIzNDc0MTIxMUwxMzAuNzUsNTQzLjI3MTg3MzQ3NDEyMTEiIG1hcmtlci1lbmQ9InVybCgjYXJyb3doZWFkNDY4NSkiIHN0eWxlPSJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIj48L3BhdGg+PGRlZnM+PG1hcmtlciBpZD0iYXJyb3doZWFkNDY4NSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJVbml0cz0ic3Ryb2tlV2lkdGgiIG1hcmtlcldpZHRoPSI4IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTSAwIDAgTCAxMCA1IEwgMCAxMCB6IiBjbGFzcz0iYXJyb3doZWFkUGF0aCIgc3R5bGU9InN0cm9rZS13aWR0aDogMTsgc3Ryb2tlLWRhc2hhcnJheTogMSwgMDsiPjwvcGF0aD48L21hcmtlcj48L2RlZnM+PC9nPjxnIGNsYXNzPSJlZGdlUGF0aCIgc3R5bGU9Im9wYWNpdHk6IDE7Ij48cGF0aCBjbGFzcz0icGF0aCIgZD0iTTI1MS4zMDQ3ODkzODQzMDcwNCw0NDQuNzA5MjcxNTg5ODE0MUwzNTIuOTcyNjU2MjUsNTA4LjY3ODEyMzQ3NDEyMTFMMzc5LjY5ODUyMjY1MzU0NjcsNTQzLjI3MTg3MzQ3NDEyMTEiIG1hcmtlci1lbmQ9InVybCgjYXJyb3doZWFkNDY4NikiIHN0eWxlPSJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIj48L3BhdGg+PGRlZnM+PG1hcmtlciBpZD0iYXJyb3doZWFkNDY4NiIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJVbml0cz0ic3Ryb2tlV2lkdGgiIG1hcmtlcldpZHRoPSI4IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTSAwIDAgTCAxMCA1IEwgMCAxMCB6IiBjbGFzcz0iYXJyb3doZWFkUGF0aCIgc3R5bGU9InN0cm9rZS13aWR0aDogMTsgc3Ryb2tlLWRhc2hhcnJheTogMSwgMDsiPjwvcGF0aD48L21hcmtlcj48L2RlZnM+PC9nPjxnIGNsYXNzPSJlZGdlUGF0aCIgc3R5bGU9Im9wYWNpdHk6IDE7Ij48cGF0aCBjbGFzcz0icGF0aCIgZD0iTTQwNS4wNTY1NTI3NjgxNjYxLDU0My4yNzE4NzM0NzQxMjExTDQyMy4xMDE1NjI1LDUwOC42NzgxMjM0NzQxMjExTDQyMy4xMDE1NjI1LDQyNS4zNTc4MTA5NzQxMjExTDQyMy4xMDE1NjI1LDM0Mi4wMzc0OTg0NzQxMjExTDI1OS4yNzgzNTYxNjgyNzcyLDI3MC4wOTUwODIwOTQ2NjIxMyIgbWFya2VyLWVuZD0idXJsKCNhcnJvd2hlYWQ0Njg3KSIgc3R5bGU9InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmUiPjwvcGF0aD48ZGVmcz48bWFya2VyIGlkPSJhcnJvd2hlYWQ0Njg3IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlclVuaXRzPSJzdHJva2VXaWR0aCIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiIGNsYXNzPSJhcnJvd2hlYWRQYXRoIiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxOyBzdHJva2UtZGFzaGFycmF5OiAxLCAwOyI+PC9wYXRoPjwvbWFya2VyPjwvZGVmcz48L2c+PC9nPjxnIGNsYXNzPSJlZGdlTGFiZWxzIj48ZyBjbGFzcz0iZWRnZUxhYmVsIiB0cmFuc2Zvcm09IiIgc3R5bGU9Im9wYWNpdHk6IDE7Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIiBjbGFzcz0ibGFiZWwiPjxyZWN0IHJ4PSIwIiByeT0iMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgc3R5bGU9ImZpbGw6I2U4ZThlODsiPjwvcmVjdD48dGV4dD48dHNwYW4geG1sOnNwYWNlPSJwcmVzZXJ2ZSIgZHk9IjFlbSIgeD0iMSI+PC90c3Bhbj48L3RleHQ+PC9nPjwvZz48ZyBjbGFzcz0iZWRnZUxhYmVsIiB0cmFuc2Zvcm09IiIgc3R5bGU9Im9wYWNpdHk6IDE7Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIiBjbGFzcz0ibGFiZWwiPjxyZWN0IHJ4PSIwIiByeT0iMCIgd2lkdGg9IjAiIGhlaWdodD0iMCIgc3R5bGU9ImZpbGw6I2U4ZThlODsiPjwvcmVjdD48dGV4dD48dHNwYW4geG1sOnNwYWNlPSJwcmVzZXJ2ZSIgZHk9IjFlbSIgeD0iMSI+PC90c3Bhbj48L3RleHQ+PC9nPjwvZz48ZyBjbGFzcz0iZWRnZUxhYmVsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3MS4xMDE1NjI1LDM0Mi4wMzc0OTg0NzQxMjExKSIgc3R5bGU9Im9wYWNpdHk6IDE7Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtOCwtOS41OTM3NSkiIGNsYXNzPSJsYWJlbCI+PHJlY3Qgcng9IjAiIHJ5PSIwIiB3aWR0aD0iMTYuMTg3NSIgaGVpZ2h0PSIxOS4yMzQzNzUiIHN0eWxlPSJmaWxsOiNlOGU4ZTg7Ij48L3JlY3Q+PHRleHQ+PHRzcGFuIHhtbDpzcGFjZT0icHJlc2VydmUiIGR5PSIxZW0iIHg9IjEiPuaYrzwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PGcgY2xhc3M9ImVkZ2VMYWJlbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjIwLjkyOTY4NzUsMzQyLjAzNzQ5ODQ3NDEyMTEpIiBzdHlsZT0ib3BhY2l0eTogMTsiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC03LjU5Mzc1LC05LjU5Mzc1KSIgY2xhc3M9ImxhYmVsIj48cmVjdCByeD0iMCIgcnk9IjAiIHdpZHRoPSIxNi4xODc1IiBoZWlnaHQ9IjE5LjIzNDM3NSIgc3R5bGU9ImZpbGw6I2U4ZThlODsiPjwvcmVjdD48dGV4dD48dHNwYW4geG1sOnNwYWNlPSJwcmVzZXJ2ZSIgZHk9IjFlbSIgeD0iMSI+5ZCmPC90c3Bhbj48L3RleHQ+PC9nPjwvZz48ZyBjbGFzcz0iZWRnZUxhYmVsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzAuNzUsNTA4LjY3ODEyMzQ3NDEyMTEpIiBzdHlsZT0ib3BhY2l0eTogMTsiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04LC05LjU5Mzc1KSIgY2xhc3M9ImxhYmVsIj48cmVjdCByeD0iMCIgcnk9IjAiIHdpZHRoPSIxNi4xODc1IiBoZWlnaHQ9IjE5LjIzNDM3NSIgc3R5bGU9ImZpbGw6I2U4ZThlODsiPjwvcmVjdD48dGV4dD48dHNwYW4geG1sOnNwYWNlPSJwcmVzZXJ2ZSIgZHk9IjFlbSIgeD0iMSI+5pivPC90c3Bhbj48L3RleHQ+PC9nPjwvZz48ZyBjbGFzcz0iZWRnZUxhYmVsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNTIuOTcyNjU2MjUsNTA4LjY3ODEyMzQ3NDEyMTEpIiBzdHlsZT0ib3BhY2l0eTogMTsiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zNi41MzEyNSwtOS41OTM3NSkiIGNsYXNzPSJsYWJlbCI+PHJlY3Qgcng9IjAiIHJ5PSIwIiB3aWR0aD0iNzQuMDQ2ODc1IiBoZWlnaHQ9IjE5LjIzNDM3NSIgc3R5bGU9ImZpbGw6I2U4ZThlODsiPjwvcmVjdD48dGV4dD48dHNwYW4geG1sOnNwYWNlPSJwcmVzZXJ2ZSIgZHk9IjFlbSIgeD0iMSI+5ZCmLOaVo+WIl+WGsueqgTwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PGcgY2xhc3M9ImVkZ2VMYWJlbCIgdHJhbnNmb3JtPSIiIHN0eWxlPSJvcGFjaXR5OiAxOyI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIgY2xhc3M9ImxhYmVsIj48cmVjdCByeD0iMCIgcnk9IjAiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiIHN0eWxlPSJmaWxsOiNlOGU4ZTg7Ij48L3JlY3Q+PHRleHQ+PHRzcGFuIHhtbDpzcGFjZT0icHJlc2VydmUiIGR5PSIxZW0iIHg9IjEiPjwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PC9nPjxnIGNsYXNzPSJub2RlcyI+PGcgY2xhc3M9Im5vZGUiIGlkPSJBIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjAuOTI5Njg3NSwzOS41OTM3NSkiIHN0eWxlPSJvcGFjaXR5OiAxOyI+PHJlY3Qgcng9IjAiIHJ5PSIwIiB4PSItNTguNjk1MzEyNSIgeT0iLTE5LjU5Mzc1IiB3aWR0aD0iMTE3LjM5MDYyNSIgaGVpZ2h0PSIzOS4xODc1Ij48L3JlY3Q+PGcgY2xhc3M9ImxhYmVsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDguNjk1MzEyNSwtOS41OTM3NSkiPjx0ZXh0Pjx0c3BhbiB4bWw6c3BhY2U9InByZXNlcnZlIiBkeT0iMWVtIiB4PSIxIj7orqHnrpfplK7nmoTmlaPliJflgLw8L3RzcGFuPjwvdGV4dD48L2c+PC9nPjwvZz48ZyBjbGFzcz0ibm9kZSIgaWQ9IkIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMC45Mjk2ODc1LDEyOC43ODEyNSkiIHN0eWxlPSJvcGFjaXR5OiAxOyI+PHJlY3Qgcng9IjUiIHJ5PSI1IiB4PSItMTU0Ljk5MjE4NzUiIHk9Ii0xOS41OTM3NSIgd2lkdGg9IjMwOS45ODQzNzUiIGhlaWdodD0iMzkuMTg3NSI+PC9yZWN0PjxnIGNsYXNzPSJsYWJlbCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE0NC45OTIxODc1LC05LjU5Mzc1KSI+PHRleHQ+PHRzcGFuIHhtbDpzcGFjZT0icHJlc2VydmUiIGR5PSIxZW0iIHg9IjEiPuS9v+eUqOaVo+WIl+WAvOeahOS4gOmDqOWIhuadpeWumuS9jeaVo+WIl+ihqOS4reeahOS4gOS4quihqOWFgzwvdHNwYW4+PC90ZXh0PjwvZz48L2c+PC9nPjxnIGNsYXNzPSJub2RlIiBpZD0iQyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjIwLjkyOTY4NzUsMjUyLjkwOTM3NDIzNzA2MDU1KSIgc3R5bGU9Im9wYWNpdHk6IDE7Ij48cG9seWdvbiBwb2ludHM9IjU0LjUzNDM3NTAwMDAwMDAwNCwwIDEwOS4wNjg3NTAwMDAwMDAwMSwtNTQuNTM0Mzc1MDAwMDAwMDA0IDU0LjUzNDM3NTAwMDAwMDAwNCwtMTA5LjA2ODc1MDAwMDAwMDAxIDAsLTU0LjUzNDM3NTAwMDAwMDAwNCIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNTQuNTM0Mzc1MDAwMDAwMDA0LDU0LjUzNDM3NTAwMDAwMDAwNCkiPjwvcG9seWdvbj48ZyBjbGFzcz0ibGFiZWwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMCkiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMSwtOS41OTM3NSkiPjx0ZXh0Pjx0c3BhbiB4bWw6c3BhY2U9InByZXNlcnZlIiBkeT0iMWVtIiB4PSIxIj7ooajlhYPkuLrnqbo/PC90c3Bhbj48L3RleHQ+PC9nPjwvZz48L2c+PGcgY2xhc3M9Im5vZGUiIGlkPSJEIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3MS4xMDE1NjI1LDQyNS4zNTc4MTA5NzQxMjExKSIgc3R5bGU9Im9wYWNpdHk6IDE7Ij48cmVjdCByeD0iMCIgcnk9IjAiIHg9Ii01MS4xMDE1NjI1IiB5PSItMTkuNTkzNzUiIHdpZHRoPSIxMDIuMjAzMTI1IiBoZWlnaHQ9IjM5LjE4NzUiPjwvcmVjdD48ZyBjbGFzcz0ibGFiZWwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMCkiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00MS4xMDE1NjI1LC05LjU5Mzc1KSI+PHRleHQ+PHRzcGFuIHhtbDpzcGFjZT0icHJlc2VydmUiIGR5PSIxZW0iIHg9IjEiPuaKm+WHumtleWVycm9yPC90c3Bhbj48L3RleHQ+PC9nPjwvZz48L2c+PGcgY2xhc3M9Im5vZGUiIGlkPSJFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjAuOTI5Njg3NSw0MjUuMzU3ODEwOTc0MTIxMSkiIHN0eWxlPSJvcGFjaXR5OiAxOyI+PHBvbHlnb24gcG9pbnRzPSI0OC43MjY1NjI1LDAgOTcuNDUzMTI1LC00OC43MjY1NjI1IDQ4LjcyNjU2MjUsLTk3LjQ1MzEyNSAwLC00OC43MjY1NjI1IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00OC43MjY1NjI1LDQ4LjcyNjU2MjUpIj48L3BvbHlnb24+PGcgY2xhc3M9ImxhYmVsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjQuNTQ2ODc1LC05LjU5Mzc1KSI+PHRleHQ+PHRzcGFuIHhtbDpzcGFjZT0icHJlc2VydmUiIGR5PSIxZW0iIHg9IjEiPumUruebuOetiT88L3RzcGFuPjwvdGV4dD48L2c+PC9nPjwvZz48ZyBjbGFzcz0ibm9kZSIgaWQ9IkYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMC43NSw1NjIuODY1NjIzNDc0MTIxMSkiIHN0eWxlPSJvcGFjaXR5OiAxOyI+PHJlY3Qgcng9IjAiIHJ5PSIwIiB4PSItNTkuMDkzNzUiIHk9Ii0xOS41OTM3NSIgd2lkdGg9IjExOC4xODc1IiBoZWlnaHQ9IjM5LjE4NzUiPjwvcmVjdD48ZyBjbGFzcz0ibGFiZWwiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMCkiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00OS4wOTM3NSwtOS41OTM3NSkiPjx0ZXh0Pjx0c3BhbiB4bWw6c3BhY2U9InByZXNlcnZlIiBkeT0iMWVtIiB4PSIxIj7ov5Tlm57ooajlhYPph4znmoTlgLw8L3RzcGFuPjwvdGV4dD48L2c+PC9nPjwvZz48ZyBjbGFzcz0ibm9kZSIgaWQ9IkciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5NC44MzU5Mzc1LDU2Mi44NjU2MjM0NzQxMjExKSIgc3R5bGU9Im9wYWNpdHk6IDE7Ij48cmVjdCByeD0iMCIgcnk9IjAiIHg9Ii0xNTQuOTkyMTg3NSIgeT0iLTE5LjU5Mzc1IiB3aWR0aD0iMzA5Ljk4NDM3NSIgaGVpZ2h0PSIzOS4xODc1Ij48L3JlY3Q+PGcgY2xhc3M9ImxhYmVsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIj48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTQ0Ljk5MjE4NzUsLTkuNTkzNzUpIj48dGV4dD48dHNwYW4geG1sOnNwYWNlPSJwcmVzZXJ2ZSIgZHk9IjFlbSIgeD0iMSI+5L2/55So5pWj5YiX5YC855qE5Y+m5LiA6YOo5YiG5p2l5a6a5L2N5pWj5YiX6KGo5Lit55qE5Y+m5LiA6KGMPC90c3Bhbj48L3RleHQ+PC9nPjwvZz48L2c+PC9nPjwvZz48L2c+PC9zdmc+</var><img src="" style="line-height: 160%; margin: 4px 0 10px; box-sizing: border-box; vertical-align: top; max-width: 100%; width: 100%;"></img></div></code></pre>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">实际上散列冲突概率很小，了解原理即可</li>
</ul>
<h4 style="line-height: 160%; box-sizing: content-box; font-size: 20px; color: #333;">-dict的实现和后果</h4>
<blockquote style="line-height: 160%; box-sizing: content-box; margin: 15px 0; border-left: 4px solid #ddd; padding: 0 15px; color: #777;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333; margin-top: 0; margin-bottom: 0;">字典在内存上的开销巨大，因为散列表必须是稀疏的，如果需要存放数量巨大的记录，用具名元组构成的列表会更好</p>
</blockquote>
<blockquote style="line-height: 160%; box-sizing: content-box; margin: 15px 0; border-left: 4px solid #ddd; padding: 0 15px; color: #777;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333; margin-top: 0; margin-bottom: 0;">字典的键查询速度很快</p>
</blockquote>
<blockquote style="line-height: 160%; box-sizing: content-box; margin: 15px 0; border-left: 4px solid #ddd; padding: 0 15px; color: #777;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333; margin-top: 0; margin-bottom: 0;">键的顺序取决于添加的顺序，所以顺序不同的字典，内容相同也是相同的</p>
</blockquote>
<blockquote style="line-height: 160%; box-sizing: content-box; margin: 15px 0; border-left: 4px solid #ddd; padding: 0 15px; color: #777;">
<p style="line-height: 160%; box-sizing: content-box; margin: 10px 0; color: #333; margin-top: 0; margin-bottom: 0;">往字典里添加新键可能改变已有键的顺序<br/>
<strong style="line-height: 160%; box-sizing: content-box; font-weight: 700;">所以不要同时遍历和修改字典</strong></p>
</blockquote>
<h4 style="line-height: 160%; box-sizing: content-box; font-size: 20px; color: #333;">-set的实现和后果</h4>
<ul style="line-height: 160%; box-sizing: content-box; display: block; list-style-type: disc; padding-left: 30px; margin: 6px 0 10px; color: #333;">
<li style="line-height: 160%; box-sizing: content-box; position: relative;">集合里的元素必须是可散列的</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">集合很消耗内存</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">判断某个元素是否在集合里很高效</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">元素的次序取决于被添加到集合里的次序</li>
<li style="line-height: 160%; box-sizing: content-box; position: relative;">往集合里添加元素会改变集合里已有元素的次序</li>
</ul>
</div><center style="display:none !important;visibility:collapse !important;height:0 !important;white-space:nowrap;width:100%;overflow:hidden">%23%23%23%20dict%E5%92%8Cset%E8%83%8C%E5%90%8E%0A-%20dict%E5%92%8Cset%E7%9A%84%E9%80%9F%E5%BA%A6%E9%9D%9E%E5%B8%B8%E5%BF%AB%0A-%20%E5%88%97%E8%A1%A8%E9%80%9F%E5%BA%A6%E4%B8%8D%E8%A1%8C%EF%BC%8C%E5%9B%A0%E4%B8%BA%E4%B8%8D%E6%94%AF%E6%8C%81%E6%95%A3%E5%88%97%0A%0A%0A%23%23%23%23%20%E4%BB%80%E4%B9%88%E6%98%AF%E6%95%A3%E5%88%97%0A%3E%20%E6%95%A3%E5%88%97%E8%A1%A8%E7%A4%BA%E4%B8%80%E4%B8%AA%E7%A8%80%E7%96%8F%E6%95%B0%E7%BB%84%EF%BC%8C%E6%95%A3%E5%88%97%E8%A1%A8%E9%87%8C%E7%9A%84%E5%8D%95%E5%85%83%E9%80%9A%E5%B8%B8%E5%8F%AB%E8%A1%A8%E5%85%83%EF%BC%88burket%EF%BC%89%EF%BC%8C%E5%9C%A8dict%E7%9A%84%E6%95%A3%E5%88%97%E8%A1%A8%E4%B8%AD%EF%BC%8C%E6%AF%8F%E4%B8%AA%E9%94%AE%E5%80%BC%E5%AF%B9%E9%83%BD%E5%8D%A0%E7%94%A8%E4%B8%80%E4%B8%AA%E8%A1%A8%E5%85%83%EF%BC%8C%E6%AF%8F%E4%B8%AA%E8%A1%A8%E5%85%83%E9%83%BD%E6%9C%89%E4%B8%A4%E4%B8%AA%E9%83%A8%E5%88%86%EF%BC%8C%E4%B8%80%E4%B8%AA%E6%98%AF%E5%AF%B9%E9%94%AE%E7%9A%84%E5%BC%95%E7%94%A8%EF%BC%8C%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%98%AF%E5%AF%B9%E5%80%BC%E7%9A%84%E5%BC%95%E7%94%A8%E3%80%82%0A%0A%3Epython%E4%BC%9A%E4%BF%9D%E8%AF%81%E5%A4%A7%E6%A6%82%E6%9C%89%E4%B8%89%E5%88%86%E4%B9%8B%E4%B8%80%E7%9A%84%E8%A1%A8%E5%85%83%E6%98%AF%E7%A9%BA%E7%9A%84%EF%BC%8C%20%E6%89%80%E4%BB%A5%E5%9C%A8%E5%BF%AB%E8%BE%BE%E5%88%B0%E8%BF%99%E4%B8%AA%E9%98%88%E5%80%BC%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8C%E5%8E%9F%E6%9C%89%E7%9A%84%E6%95%A3%E5%88%97%E8%A1%A8%E4%BC%9A%E8%A2%AB%E5%A4%8D%E5%88%B6%E5%88%B0%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A4%A7%E7%9A%84%E7%A9%BA%E9%97%B4%E9%87%8C%EF%BC%8C%20%0A%0A%0A%23%23%23%23%23%20-%20%E6%95%A3%E5%88%97%E5%80%BC%E5%92%8C%E7%9B%B8%E7%AD%89%E6%80%A7%0A%3E%20%E5%A6%82%E6%9E%9C%E4%B8%A4%E4%B8%AA%E5%AF%B9%E8%B1%A1%E5%9C%A8%E6%AF%94%E8%BE%83%E7%9A%84%E6%97%B6%E5%80%99%E6%98%AF%E7%9B%B8%E7%AD%89%E7%9A%84%EF%BC%8C%E9%82%A3%E5%AE%83%E4%BB%AC%E7%9A%84%E6%95%A3%E5%88%97%E5%80%BC%E5%BF%85%E9%A1%BB%E7%9B%B8%E7%AD%89%EF%BC%8C%E5%90%A6%E5%88%99%E6%95%A3%E5%88%97%E8%A1%A8%E5%B0%B1%E4%B8%8D%E8%83%BD%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%E4%BA%86%EF%BC%8C%E4%B8%BA%E4%BA%86%E8%AE%A9%E6%95%A3%E5%88%97%E5%80%BC%E8%83%BD%E5%A4%9F%E8%83%9C%E4%BB%BB%E6%95%A3%E5%88%97%E8%A1%A8%E7%B4%A2%E5%BC%95%E7%9A%84%E8%A7%92%E8%89%B2%EF%BC%8C%E5%AE%83%E4%BB%AC%E5%9C%A8%E7%B4%A2%E5%BC%95%E7%A9%BA%E9%97%B4%E9%87%8C%E5%BA%94%E5%B0%BD%E9%87%8F%E5%88%86%E6%95%A3%E5%BC%80%EF%BC%8C%E8%BF%99%E6%84%8F%E5%91%B3%E7%9D%80%E8%B6%8A%E7%9B%B8%E8%BF%91%E7%9A%84%E4%BD%86%E4%B8%8D%E7%9B%B8%E7%AD%89%E7%9A%84%E5%AF%B9%E8%B1%A1%EF%BC%8C%E5%85%B6%E6%95%A3%E5%88%97%E5%80%BC%E5%BA%94%E8%AF%A5%E5%B7%AE%E5%88%AB%E5%BE%88%E5%A4%A7%EF%BC%8C%E6%AF%94%E5%A6%821%2C1.00001%2C1.00002%E7%9A%84%E6%95%A3%E5%88%97%E5%80%BC%E5%BA%94%E8%AF%A5%E7%9B%B8%E5%B7%AE%E5%BE%88%E8%BF%9C%0A%0A%23%23%23%23%23%20-%20%E6%95%A3%E5%88%97%E8%A1%A8%E7%AE%97%E6%B3%95%0A%60%60%60mermaid%0Agraph%20TD%0AA%5B%E8%AE%A1%E7%AE%97%E9%94%AE%E7%9A%84%E6%95%A3%E5%88%97%E5%80%BC%5D%20--%3E%20B(%E4%BD%BF%E7%94%A8%E6%95%A3%E5%88%97%E5%80%BC%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%E6%9D%A5%E5%AE%9A%E4%BD%8D%E6%95%A3%E5%88%97%E8%A1%A8%E4%B8%AD%E7%9A%84%E4%B8%80%E4%B8%AA%E8%A1%A8%E5%85%83)%0AB%20--%3E%20C%7B%E8%A1%A8%E5%85%83%E4%B8%BA%E7%A9%BA%3F%7D%0AC%20--%3E%7C%E6%98%AF%7C%20D%5B%E6%8A%9B%E5%87%BAkeyerror%5D%0AC%20--%3E%7C%E5%90%A6%7C%20E%7B%E9%94%AE%E7%9B%B8%E7%AD%89%3F%7D%0AE%20--%3E%7C%E6%98%AF%7C%20F%5B%E8%BF%94%E5%9B%9E%E8%A1%A8%E5%85%83%E9%87%8C%E7%9A%84%E5%80%BC%5D%0AE%20--%3E%7C%E5%90%A6%2C%E6%95%A3%E5%88%97%E5%86%B2%E7%AA%81%7C%20G%5B%E4%BD%BF%E7%94%A8%E6%95%A3%E5%88%97%E5%80%BC%E7%9A%84%E5%8F%A6%E4%B8%80%E9%83%A8%E5%88%86%E6%9D%A5%E5%AE%9A%E4%BD%8D%E6%95%A3%E5%88%97%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%8F%A6%E4%B8%80%E8%A1%8C%5D%0AG%20--%3EC%0A%60%60%60%0A%0A-%20%E5%AE%9E%E9%99%85%E4%B8%8A%E6%95%A3%E5%88%97%E5%86%B2%E7%AA%81%E6%A6%82%E7%8E%87%E5%BE%88%E5%B0%8F%EF%BC%8C%E4%BA%86%E8%A7%A3%E5%8E%9F%E7%90%86%E5%8D%B3%E5%8F%AF%0A%0A%0A%0A%23%23%23%23%20-dict%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%92%8C%E5%90%8E%E6%9E%9C%0A%3E%20%E5%AD%97%E5%85%B8%E5%9C%A8%E5%86%85%E5%AD%98%E4%B8%8A%E7%9A%84%E5%BC%80%E9%94%80%E5%B7%A8%E5%A4%A7%EF%BC%8C%E5%9B%A0%E4%B8%BA%E6%95%A3%E5%88%97%E8%A1%A8%E5%BF%85%E9%A1%BB%E6%98%AF%E7%A8%80%E7%96%8F%E7%9A%84%EF%BC%8C%E5%A6%82%E6%9E%9C%E9%9C%80%E8%A6%81%E5%AD%98%E6%94%BE%E6%95%B0%E9%87%8F%E5%B7%A8%E5%A4%A7%E7%9A%84%E8%AE%B0%E5%BD%95%EF%BC%8C%E7%94%A8%E5%85%B7%E5%90%8D%E5%85%83%E7%BB%84%E6%9E%84%E6%88%90%E7%9A%84%E5%88%97%E8%A1%A8%E4%BC%9A%E6%9B%B4%E5%A5%BD%0A%0A%0A%3E%20%E5%AD%97%E5%85%B8%E7%9A%84%E9%94%AE%E6%9F%A5%E8%AF%A2%E9%80%9F%E5%BA%A6%E5%BE%88%E5%BF%AB%0A%0A%3E%20%E9%94%AE%E7%9A%84%E9%A1%BA%E5%BA%8F%E5%8F%96%E5%86%B3%E4%BA%8E%E6%B7%BB%E5%8A%A0%E7%9A%84%E9%A1%BA%E5%BA%8F%EF%BC%8C%E6%89%80%E4%BB%A5%E9%A1%BA%E5%BA%8F%E4%B8%8D%E5%90%8C%E7%9A%84%E5%AD%97%E5%85%B8%EF%BC%8C%E5%86%85%E5%AE%B9%E7%9B%B8%E5%90%8C%E4%B9%9F%E6%98%AF%E7%9B%B8%E5%90%8C%E7%9A%84%0A%0A%3E%20%E5%BE%80%E5%AD%97%E5%85%B8%E9%87%8C%E6%B7%BB%E5%8A%A0%E6%96%B0%E9%94%AE%E5%8F%AF%E8%83%BD%E6%94%B9%E5%8F%98%E5%B7%B2%E6%9C%89%E9%94%AE%E7%9A%84%E9%A1%BA%E5%BA%8F%0A%3E%20__%E6%89%80%E4%BB%A5%E4%B8%8D%E8%A6%81%E5%90%8C%E6%97%B6%E9%81%8D%E5%8E%86%E5%92%8C%E4%BF%AE%E6%94%B9%E5%AD%97%E5%85%B8__%0A%0A%0A%23%23%23%23%20-set%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%92%8C%E5%90%8E%E6%9E%9C%0A-%20%E9%9B%86%E5%90%88%E9%87%8C%E7%9A%84%E5%85%83%E7%B4%A0%E5%BF%85%E9%A1%BB%E6%98%AF%E5%8F%AF%E6%95%A3%E5%88%97%E7%9A%84%0A-%20%E9%9B%86%E5%90%88%E5%BE%88%E6%B6%88%E8%80%97%E5%86%85%E5%AD%98%0A-%20%E5%88%A4%E6%96%AD%E6%9F%90%E4%B8%AA%E5%85%83%E7%B4%A0%E6%98%AF%E5%90%A6%E5%9C%A8%E9%9B%86%E5%90%88%E9%87%8C%E5%BE%88%E9%AB%98%E6%95%88%0A-%20%E5%85%83%E7%B4%A0%E7%9A%84%E6%AC%A1%E5%BA%8F%E5%8F%96%E5%86%B3%E4%BA%8E%E8%A2%AB%E6%B7%BB%E5%8A%A0%E5%88%B0%E9%9B%86%E5%90%88%E9%87%8C%E7%9A%84%E6%AC%A1%E5%BA%8F%0A-%20%E5%BE%80%E9%9B%86%E5%90%88%E9%87%8C%E6%B7%BB%E5%8A%A0%E5%85%83%E7%B4%A0%E4%BC%9A%E6%94%B9%E5%8F%98%E9%9B%86%E5%90%88%E9%87%8C%E5%B7%B2%E6%9C%89%E5%85%83%E7%B4%A0%E7%9A%84%E6%AC%A1%E5%BA%8F</center></span>
</div></body></html> 